En estas notas en línea se hace un breve ejemplo de cómo extraer datos desde el Banco de México (Banxico) y se hace un análisis de los datos obtenidos. Esto junto con una práctica de cómo graficar los mismos.
Como ejercicio, se extraerá información histórica de la tasa de CETES en mercado secundario, así como del tipo de cambio FIX y se harán gráficas y tablas de análisis a manera de ejemplo. Esto con las siguientes librerías:
Para extraer datos desde Banxico, se requiere de una API key que se
obtiene registrándose en la página de Banxico. Una vez obtenida la API
key, se puede hacer uso de la función getSeries de la
librería banxicoR para extraer los datos. A continuación se
muestra un ejemplo de cómo extraer la tasa de CETES a 28 días en mercado
secundario y el tipo de cambio FIX.
Tipo de cambio FIX: SF43718
# Extracción de datos del tipo de cambio FIX:
tcFIX = getSeriesData("SF43718", startDate = "2003-05-16", endDate = "2024-07-09")
tcFIX=as.data.frame(tcFIX$SF43718)
Cetes de 28 días: SF45470
# Extracción de datos de los CETES de 28 días en mercado secundario:
cetes28 = getSeriesData("SF45470", startDate = "2003-05-16", endDate = "2024-07-09")
cetes28=as.data.frame(cetes28$SF45470)
# Generamos la tabla general fusionada con la función merge:
tablaGeneral=merge(cetes28, tcFIX, by="date")
# Cambiamos los nombres de las columnas:
colnames(tablaGeneral)=c("Fecha","cetes28","tcFIX")
Ahora realizamos una gráfica histórica tanto de la tasa de CETES a 28 días en mercado secundario como del tipo de cambio FIX.
Gráfica de la tasa de CETES a 28 días en mercado secundario:
# Creamos el objeto tipo plotly:
figCETES=plot_ly()
# Añadimos la serie de datos de los CETES:
figCETES=add_trace(figCETES, x=~Fecha, y=~cetes28, data=tablaGeneral,
name="CETES 28 días", type="scatter", mode="lines")
# Le damos formato a nuestra gráfica:
figCETES=layout(figCETES,
title="Tasa de CETES a 28 días en mercado secundario",
xaxis=list(title="Fecha (diario)"),
yaxis=list(title="Tasa de interés (%)"))
figCETES
Gráfica del tipo de cambio FIX:
# Creamos el objeto tipo plotly:
figFIX=plot_ly()
# Añadimos la serie de datos del tipo de cambio FIX:
figFIX=add_trace(figFIX, x=~date, y=~value, data=tcFIX,
name="T.C. FIX", type="scatter", mode="lines")
# Le damos formato a nuestra gráfica:
figFIX=layout(figFIX,
title="Tipo de cambio FIX",
xaxis=list(title="Fecha (diario)"),
yaxis=list(title="Pesos por dólar"))
figFIX
Ahora presentamos las dos gráficas previas en una sola:
# Creamos la gráfica con sus sub gráficas:
figuraTotal= subplot(figFIX, figCETES, nrows=2)
# Sobreescribimos el título general de la gráfica a nuestor gusto
figuraTotal=layout(figuraTotal,title="Histórico de T.C. FIX y CETES de 28d")
# Imprimimos la gráfica final:
figuraTotal
Ahora hacemos nuestro análisis con una gráfica de dispersión:
# Creamos la gráfica de dispersión:
figuraDispersion=plot_ly()
# Se agregan los puntos:
figuraDispersion=add_trace(figuraDispersion,
x=~cetes28$value, y=~tcFIX$value,
type="scatter", mode="markers")
# Se le da formato a la gráfica:
figuraDispersion=layout(figuraDispersion,
title="Comparativo de CETES v.s. T.C. FIX",
xaxis=list(title="CETES 28 días (%)"),
yaxis=list(title="Tipo de cambio FIX"))
# imprimimos la gráfica:
figuraDispersion
Primero fusionamos los datos de los CETES de 28 días con el tipo de cambio FIX. Esto utilizando la función merge de la librería dplyr:
# Generamos la tabla general fusionada con la función merge:
tablaGeneral=merge(cetes28, tcFIX, by="date")
# Cambiamos los nombres de las columnas:
colnames(tablaGeneral)=c("Fecha","cetes28","tcFIX")
# Mostramos la tabla con la función datatable de la librería DT para que sea presentada en una página web:
datatable(tablaGeneral,
colnames=c("Fecha","Cetes 28 días","T.C. FIX"),
caption="Valores históricos de las variables de interés"
)
Ahora realizamos el análisis de regresión para la siguiente ecuación:
\[tcFIX_t=\alpha+\beta cetes28d\]
# Realizamos el análisis de regresión:
regresion=lm("tcFIX~cetes28", data=tablaGeneral)
# CReamos un pronóstico del Tipo de cambio, dados los valores de tasa de CETEs de 28 días:
pronostico= regresion$fitted.values
# Mostramos los resultados de la regresión:
datatable( summary(regresion)$coefficients )
Vemos la gráfica de la regresión:
# Creamos la gráfica de dispersión:
figuraDispersion=plot_ly()
# Se agregan los puntos:
figuraDispersion=add_trace(figuraDispersion,
x=~cetes28$value, y=~tcFIX$value,
type="scatter", mode="markers",
name="Valores observados")
# Se agrega la línea de regresión:
figuraDispersion=add_trace(figuraDispersion,
x=~cetes28$value, y=pronostico,
type="scatter", mode="lines+markers",
name="Valores estimados")
# Se le da formato a la gráfica:
figuraDispersion=layout(figuraDispersion,
title="Comparativo de CETES v.s. T.C. FIX",
xaxis=list(title="CETES 28 días (%)"),
yaxis=list(title="Tipo de cambio FIX"))
# imprimimos la gráfica:
figuraDispersion
Realizamos un cálculo del coeficiente de correlación:
# Realizamos un análisis de correlación entre las variables:
correlacion=cor(tablaGeneral$cetes28, tablaGeneral$tcFIX)
correlacion
## [1] 0.08489058
Realizamos una tabla en donde se presente el resumen como promedio y desviación estándar de las variables:
# Creamos la tabla de resumen:
tablaResumen=summary(tablaGeneral)
tablaResumen
## Fecha cetes28 tcFIX
## Min. :2003-05-16 Min. : 2.584 Min. : 9.918
## 1st Qu.:2008-08-19 1st Qu.: 4.270 1st Qu.:11.501
## Median :2013-12-03 Median : 6.114 Median :13.452
## Mean :2013-12-06 Mean : 6.157 Mean :15.140
## 3rd Qu.:2019-03-26 3rd Qu.: 7.625 3rd Qu.:18.861
## Max. :2024-07-09 Max. :11.462 Max. :25.119
Hacemos lo anterior pero con la librería stargazer. Esta librería nos permite realizar tablas de datos más estilizadas que puedan exportarse a un archivo de word o excel. Si queremos que se imprima la tabla en una página web, en un word o en un excel, debemos utilizar el argument type como html. NOTA: del objeto tablaGeneral solo nos interesan las columnas 2 a 3 por que queremos un resumen de esas variables y no de la fecha
# Creamos la tabla de resumen con stargazer:
stargazer(tablaGeneral[,2:3], type="html")
| Statistic | N | Mean | St. Dev. | Min | Max |
| cetes28 | 5,329 | 6.157 | 2.299 | 2.584 | 11.462 |
| tcFIX | 5,329 | 15.140 | 3.752 | 9.918 | 25.119 |